#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>	// Cpp的函数库

// 导入std中的函数
using namespace std;	

void swap(int &a, int &b)
{
	int tmp = 0;
	tmp = a;
	a = b;
	b = tmp;
}

typedef struct Student{
	char name[16];
	int age;
} Student;

void insetStu(Student &stu)
{
	// 通过引用修改值
	strcpy(stu.name,"WU KAI JIE");

}

void insetConstStu(const Student &stu)
{
	cout << "--stu.name: " << stu.name << endl;
	cout << "--stu.age: " << stu.age << endl;
}

// C  : 使用gcc进行编译，例如：gcc sample.c
// Cpp: 使用g++进行编译，例如：g++ sample.cpp
int main()
{

	/*
	 * 1.Cpp代码中可以混编C的代码，也可以调用C的代码
	 * 2.Cpp是面向对象的语言，C是面向过程的语言
	 * 3.大部分开源框架都是基于Cpp编写，NDK开发中也是以Cpp为主
	 * */
	std::cout << "std:HelloWord" << std::endl;
	cout << "HelloWord" << endl;


	int a = 10;		// 栈中声明一个变量a
	int b = 18;		// 栈中声明一个变量b，然后将b的值等于10，此时b的地址与a不同
	// 声明一个引用
	int &c = a;		// 将a指向的内存，取一个别名c，a和c的内存地址一样
	cout << "a 的地址：" << &a << "，c 的地址：" << &c << endl;
	cout << "b 的地址：" << &b << endl;

	// 引用是Cpp里面的概念，不是C里面的概念
	cout << "a 的值：" << a << endl;
	cout << "b 的值：" << b << endl;
	swap(a,b);
	cout << "交换后 a 的值：" << a << endl;
	cout << "交换后 b 的值：" << b << endl;

	Student stu = {"Jonyker",25};
	cout << "stu.name: " << stu.name << endl;
	cout << "stu.age: " << stu.age << endl;
	insetStu(stu);
	cout << "-stu.name: " << stu.name << endl;
	cout << "-stu.age: " << stu.age << endl;

	// 常量引用
	insetConstStu(stu);

	exit(0);
}
